#ifndef RETINAFACE_DET_API_H
#define RETINAFACE_DET_API_H

#include <iostream>
#include <memory>
#include <opencv2/opencv.hpp>

namespace retinaface
{


class RetinaFaceApi
{
    public:


    RetinaFaceApi(const int gpu_id, const std::string &onnx_path, const std::string &trt_dir, const int max_batch = 1);
    ~ RetinaFaceApi();

    public:

      void Execute(const cv::Mat &img,
                              std::vector<cv::Rect> &rectangles,
                              std::vector<float> &confidence,
                              std::vector<std::vector<cv::Point>> &landmarks);

      void Execute(const std::vector<cv::Mat>&imgs, 
                                  std::vector<std::vector<cv::Rect>>&rectangles, 
                                  std::vector<std::vector<float>>&confidence,
                                  std::vector<std::vector<std::vector<cv::Point>>>&landmarks);
    private:

      RetinaFaceApi();

      class Impl;
      std::unique_ptr <Impl> impl_;

};






} // namespace retinaface









#endif